package com.aiwiown.snackmq.common.exception;

import lombok.Getter;

/**
 * SnackMQ 异常基类
 */
@Getter
public class SnackMQException extends RuntimeException {

    private final ErrorCode errorCode;

    public SnackMQException(ErrorCode errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
    }

    public SnackMQException(ErrorCode errorCode, Throwable cause) {
        // 当只有 cause 时，使用 ErrorCode 的描述作为消息
        super(errorCode.getDescription(), cause);
        this.errorCode = errorCode;
    }

    public SnackMQException(ErrorCode errorCode, String message, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode;
    }

    @Override
    public String getMessage() {
        String message = super.getMessage();
        // 确保消息不为空，如果为空则使用 ErrorCode 的描述
        String effectiveMessage = (message != null && !message.isEmpty()) ? message : errorCode.getDescription();
        return String.format("[%d] %s", errorCode.getCode(), effectiveMessage);
    }
}